package StudyGroup;
/*
* 数组的学习
一、数组的概述
1、数组（Array）是多个相同类型的数据按照一定的顺序排列的集合
并使用一个名字命名，并通过编号的方式对这些数据进行统一管理

2、数组的相关概念
> 数组名
> 元素
> 下标、、角标、索引
> 数组的长度、元素的个数

3、数组的特点，数组是有序排列的。

4、数组属于引用数据类型，数组的元素的类型可以是各种类型，甚至是字符串。

5、创建数组对象会在内存中开辟一整块连续的空间

6、数组的长度一旦确定，就不能修改。

7、数组的分类
    （1）按照维数：一维数组，二维数组。。。
    （2）按照数组的元素的类型分类：基本数据类型元素的数组、引用数据类型元素的数组

8、一维数组的使用
    （1）一维数组的声明和初始化
    （2）如何调用数组的指定位置的元素
    （3）如何获取数组的长度
    （4）如何遍历数组
    （5）数组元素的默认初始化值
    * 数组元素是整型：0
    * 数组元素是浮点型：0.0
    * 数组元素是char型：0 ‘0’
    * 数组元素是boolea型：false
    * 数组元素是应用数据类型时：null

    （6）数组的内存解析

* */

/*
public class NumberGroup {
    public static void main(String[] args) {

        //1、一维数组的声明和初始化

        int[] ids;
        //静态初始化
        ids = new int[5];

        //动态初始化
        String[] names = new String[5];

        //2、调用数组指定位置的元素，通过角标的方式调用
        //数组的角标是从零开始的，到数组的长度-1结束
        names[0] = "王明";
        names[1] = "012";
        names[2] = "123";
        names[3] = "456";
        names[4] = "789";

        //3、如何获取数组的长度
        //属性：length
        System.out.println(names.length);
        System.out.println(ids.length);

        //4、如何遍历数组
        for (int i = 0; i < names.length; i++){
            System.out.println(names[i]);
        }

        //5、数组元素的默认初始化值

        //
        int arr[] = new int[5];
        for (int i = 0; i < arr.length; i++){
            System.out.println(arr[i]);
        }

        short arr1[] = new short[5];
        for (int i = 0; i < arr1.length; i++){
            System.out.println(arr1[i]);
        }

        float arr2[] = new float[5];
        for (int i = 0; i < arr2.length; i++){
            System.out.println(arr2[i]);
        }

        char arr3[] = new char[5];
        for (int i = 0; i < arr3.length; i++){
            System.out.println(arr3[i]);
        }

        boolean arr4[] = new boolean[5];
        for (int i = 0; i < arr4.length; i++){
            System.out.println(arr4[i]);
        }

        String arr5[] = new String[5];
        for (int i = 0; i < arr5.length; i++){
            System.out.println(arr5[i]);
        }


    }
}
*/

/*
* 二维数组的学习
*
    1、对于二维数组的理解，我们可以看成是一维数组array1又作为另一个一维数组array2的
       元素而存在。其实，从数组底层的运行机制来看，没有多维数组。

    2、
    （1）一维数组的声明和初始化
    （2）如何调用数组的指定位置的元素
    （3）如何获取数组的长度
    （4）如何遍历数组
    （5）数组元素的默认初始化值
    * 针对于初始化方式一：比如int[][] arr = new int[4][3];
    *   外层元素的初始化值为：地址值
    *   内层元素的初始化值为：与一维数组初始化情况相同
    *
    * 针对于初始化方式二：比如：int[][] arr = new int[4][];
    *   外层元素的初始化值为：null
    *   内层元素的初始化值为：不能调用，否则报错。
    （6）数组的内存解析
* */

public class NumberGroup {

    public static void main(String[] args) {

        //二维数组的声明和初始化

        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{3,4,5}};

        //动态初始化
        String[][] arr2 = new String[3][];

        //2、如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);
        //System.out.println(arr2[1][0]); //空指针错误

        arr2[1] = new String[3];//确认二维数组的地址
        System.out.println(arr2[1][2]);

        //3、获取数组的长度
        System.out.println(arr1.length);//2 长度取到的是一维数组的长度
        System.out.println(arr1[0].length);//3 具体的到二维数组的长度

        //4、如何遍历二维数组
        for (int[] i:arr1 ){
            for (int j : i){
                System.out.print( j + "\t");
            }
            System.out.println();
        }

    }
}
